package br.com.ac.fatureweb.integration.billing;

import java.io.Serializable;

public class LogLeituraVO implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 676751119618745871L;

	private Long id;

	private Long mes;

	private Long ano;

	private Long leitura;

	private Long dataLeitura;

	private Double valorConta;

	private Long qtdeImpressao;

	private Long qtdeCorrecao;

	private Boolean leituraConfirmada;

	/*
	 * Ocorrência que o leiturista informa.
	 */
	private Long codOcorrencia1;

	private Long idLeiturista;

	private Long inscricao;

	private Long idCarga;

	private String observacao;

	/*
	 * Ocorrência informada pelo sistema.
	 */
	private Long codOcorrencia2;

	private Integer contaRetida;

	private Boolean contaRegerada;

	private Boolean foto;

	private Double longitude;

	private Double latitude;

	private Long consumo;

	private Double valorAgua;

	private Double valorEsgoto;

	private Double valorServicos;

	private Double valorTotal;

	public LogLeituraVO() {
		super();
	}

	public LogLeituraVO(Long id, Long leitura, Long dataLeitura,
			Double valorConta, Long qtdeImpressao, Long qtdeCorrecao,
			Boolean leituraConfirmada, Long codOcorrencia1, Long idLeiturista,
			Long inscricao, Long idCarga, String observacao,
			Long codOcorrencia2, Integer contaRetida, Boolean contaRegerada,
			Boolean foto, Double longitude, Double latitude) {
		super();
		this.id = id;
		this.leitura = leitura;
		this.dataLeitura = dataLeitura;
		this.valorConta = valorConta;
		this.qtdeImpressao = qtdeImpressao;
		this.qtdeCorrecao = qtdeCorrecao;
		this.leituraConfirmada = leituraConfirmada;
		this.codOcorrencia1 = codOcorrencia1;
		this.idLeiturista = idLeiturista;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
		this.observacao = observacao;
		this.codOcorrencia2 = codOcorrencia2;
		this.contaRetida = contaRetida;
		this.contaRegerada = contaRegerada;
		this.foto = foto;
		this.longitude = longitude;
		this.latitude = latitude;
	}

	public LogLeituraVO(Long id, Long mes, Long ano, Long leitura,
			Long dataLeitura, Double valorConta, Long qtdeImpressao,
			Long qtdeCorrecao, Boolean leituraConfirmada, Long codOcorrencia1,
			Long idLeiturista, Long inscricao, Long idCarga, String observacao,
			Long codOcorrencia2, Integer contaRetida, Boolean contaRegerada,
			Boolean foto, Double longitude, Double latitude, Long consumo,
			Double valorAgua, Double valorEsgoto, Double valorServicos,
			Double valorTotal) {
		super();
		this.id = id;
		this.mes = mes;
		this.ano = ano;
		this.leitura = leitura;
		this.dataLeitura = dataLeitura;
		this.valorConta = valorConta;
		this.qtdeImpressao = qtdeImpressao;
		this.qtdeCorrecao = qtdeCorrecao;
		this.leituraConfirmada = leituraConfirmada;
		this.codOcorrencia1 = codOcorrencia1;
		this.idLeiturista = idLeiturista;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
		this.observacao = observacao;
		this.codOcorrencia2 = codOcorrencia2;
		this.contaRetida = contaRetida;
		this.contaRegerada = contaRegerada;
		this.foto = foto;
		this.longitude = longitude;
		this.latitude = latitude;
		this.consumo = consumo;
		this.valorAgua = valorAgua;
		this.valorEsgoto = valorEsgoto;
		this.valorServicos = valorServicos;
		this.valorTotal = valorTotal;
	}

	/**
	 * @return the mes
	 */
	public Long getMes() {
		return mes;
	}

	/**
	 * @param mes
	 *            the mes to set
	 */
	public void setMes(Long mes) {
		this.mes = mes;
	}

	/**
	 * @return the ano
	 */
	public Long getAno() {
		return ano;
	}

	/**
	 * @param ano
	 *            the ano to set
	 */
	public void setAno(Long ano) {
		this.ano = ano;
	}

	public LogLeituraVO(Long leitura, Long dataLeitura, Long codOcorrencia1,
			Long inscricao, Long idCarga) {
		super();
		this.leitura = leitura;
		this.dataLeitura = dataLeitura;
		this.codOcorrencia1 = codOcorrencia1;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the leitura
	 */
	public Long getLeitura() {
		return leitura;
	}

	/**
	 * @param leitura
	 *            the leitura to set
	 */
	public void setLeitura(Long leitura) {
		this.leitura = leitura;
	}

	/**
	 * @return the dataLeitura
	 */
	public Long getDataLeitura() {
		return dataLeitura;
	}

	/**
	 * @param dataLeitura
	 *            the dataLeitura to set
	 */
	public void setDataLeitura(Long dataLeitura) {
		this.dataLeitura = dataLeitura;
	}

	/**
	 * @return the valorConta
	 */
	public Double getValorConta() {
		return valorConta;
	}

	/**
	 * @param valorConta
	 *            the valorConta to set
	 */
	public void setValorConta(Double valorConta) {
		this.valorConta = valorConta;
	}

	/**
	 * @return the qtdeImpressao
	 */
	public Long getQtdeImpressao() {
		return qtdeImpressao;
	}

	/**
	 * @param qtdeImpressao
	 *            the qtdeImpressao to set
	 */
	public void setQtdeImpressao(Long qtdeImpressao) {
		this.qtdeImpressao = qtdeImpressao;
	}

	/**
	 * @return the leituraConfirmada
	 */
	public Boolean getLeituraConfirmada() {
		return leituraConfirmada;
	}

	/**
	 * @param leituraConfirmada
	 *            the leituraConfirmada to set
	 */
	public void setLeituraConfirmada(Boolean leituraConfirmada) {
		this.leituraConfirmada = leituraConfirmada;
	}

	/**
	 * @return the codOcorrencia1
	 */
	public Long getCodOcorrencia1() {
		return codOcorrencia1;
	}

	/**
	 * @param codOcorrencia1
	 *            the codOcorrencia1 to set
	 */
	public void setCodOcorrencia1(Long codOcorrencia1) {
		this.codOcorrencia1 = codOcorrencia1;
	}

	/**
	 * @return the idLeiturista
	 */
	public Long getIdLeiturista() {
		return idLeiturista;
	}

	/**
	 * @param idLeiturista
	 *            the idLeiturista to set
	 */
	public void setIdLeiturista(Long idLeiturista) {
		this.idLeiturista = idLeiturista;
	}

	/**
	 * @return the inscricao
	 */
	public Long getInscricao() {
		return inscricao;
	}

	/**
	 * @param inscricao
	 *            the inscricao to set
	 */
	public void setInscricao(Long inscricao) {
		this.inscricao = inscricao;
	}

	/**
	 * @return the idCarga
	 */
	public Long getIdCarga() {
		return idCarga;
	}

	/**
	 * @param idCarga
	 *            the idCarga to set
	 */
	public void setIdCarga(Long idCarga) {
		this.idCarga = idCarga;
	}

	/**
	 * @return the observacao
	 */
	public String getObservacao() {
		return observacao;
	}

	/**
	 * @param observacao
	 *            the observacao to set
	 */
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	/**
	 * @return the codOcorrencia2
	 */
	public Long getCodOcorrencia2() {
		return codOcorrencia2;
	}

	/**
	 * @param codOcorrencia2
	 *            the codOcorrencia2 to set
	 */
	public void setCodOcorrencia2(Long codOcorrencia2) {
		this.codOcorrencia2 = codOcorrencia2;
	}

	/**
	 * @return the contaRetida
	 */
	public Integer getContaRetida() {
		return contaRetida;
	}

	/**
	 * @param contaRetida
	 *            the contaRetida to set
	 */
	public void setContaRetida(Integer contaRetida) {
		this.contaRetida = contaRetida;
	}

	/**
	 * @return the contaRegerada
	 */
	public Boolean getContaRegerada() {
		return contaRegerada;
	}

	/**
	 * @param contaRegerada
	 *            the contaRegerada to set
	 */
	public void setContaRegerada(Boolean contaRegerada) {
		this.contaRegerada = contaRegerada;
	}

	/**
	 * @return the foto
	 */
	public Boolean getFoto() {
		return foto;
	}

	/**
	 * @param foto
	 *            the foto to set
	 */
	public void setFoto(Boolean foto) {
		this.foto = foto;
	}

	/**
	 * @return the longitude
	 */
	public Double getLongitude() {
		return longitude;
	}

	/**
	 * @param longitude
	 *            the longitude to set
	 */
	public void setLongitude(Double longitude) {
		this.longitude = longitude;
	}

	/**
	 * @return the latitude
	 */
	public Double getLatitude() {
		return latitude;
	}

	/**
	 * @param latitude
	 *            the latitude to set
	 */
	public void setLatitude(Double latitude) {
		this.latitude = latitude;
	}

	public Long getQtdeCorrecao() {
		return qtdeCorrecao;
	}

	public void setQtdeCorrecao(Long qtdeCorrecao) {
		this.qtdeCorrecao = qtdeCorrecao;
	}

	/**
	 * @return the consumo
	 */
	public Long getConsumo() {
		return consumo;
	}

	/**
	 * @param consumo
	 *            the consumo to set
	 */
	public void setConsumo(Long consumo) {
		this.consumo = consumo;
	}

	/**
	 * @return the valorAgua
	 */
	public Double getValorAgua() {
		return valorAgua;
	}

	/**
	 * @param valorAgua
	 *            the valorAgua to set
	 */
	public void setValorAgua(Double valorAgua) {
		this.valorAgua = valorAgua;
	}

	/**
	 * @return the valorEsgoto
	 */
	public Double getValorEsgoto() {
		return valorEsgoto;
	}

	/**
	 * @param valorEsgoto
	 *            the valorEsgoto to set
	 */
	public void setValorEsgoto(Double valorEsgoto) {
		this.valorEsgoto = valorEsgoto;
	}

	/**
	 * @return the valorServicos
	 */
	public Double getValorServicos() {
		return valorServicos;
	}

	/**
	 * @param valorServicos
	 *            the valorServicos to set
	 */
	public void setValorServicos(Double valorServicos) {
		this.valorServicos = valorServicos;
	}

	/**
	 * @return the valorTotal
	 */
	public Double getValorTotal() {
		return valorTotal;
	}

	/**
	 * @param valorTotal
	 *            the valorTotal to set
	 */
	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((idCarga == null) ? 0 : idCarga.hashCode());
		result = prime * result
				+ ((inscricao == null) ? 0 : inscricao.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof LogLeituraVO)) {
			return false;
		}
		LogLeituraVO other = (LogLeituraVO) obj;
		if (id == null) {
			if (other.id != null) {
				return false;
			}
		} else if (!id.equals(other.id)) {
			return false;
		}
		if (idCarga == null) {
			if (other.idCarga != null) {
				return false;
			}
		} else if (!idCarga.equals(other.idCarga)) {
			return false;
		}
		if (inscricao == null) {
			if (other.inscricao != null) {
				return false;
			}
		} else if (!inscricao.equals(other.inscricao)) {
			return false;
		}
		return true;
	}

	public enum TypeRetencao {
		OCORRENCIA(1, "OCORRÊNCIA"), PARAMETRO(2, "PARÂMETROS SAAE"), IMOVEL(3,
				"PARÂMETROS IMÓVEL");

		private int codigo;

		private String descricao;

		TypeRetencao(int codigo, String descricao) {
			this.codigo = codigo;
			this.descricao = descricao;
		}

		public String getDescricao() {
			return descricao;
		}

		public void setDescricao(String descricao) {
			this.descricao = descricao;
		}

		public int getCodigo() {
			return codigo;
		}

		public void setCodigo(int codigo) {
			this.codigo = codigo;
		}

		public static TypeRetencao valueOf(final int codigo) {
			final TypeRetencao[] values = TypeRetencao.values();

			for (final TypeRetencao typeRetencao : values) {
				if (typeRetencao.getCodigo() == codigo) {
					return typeRetencao;
				}
			}
			return null;
		}

	}

}
